<template>
  <slot></slot>
</template>

<script>
export default {
  name: "KForm",


  provide() {
    return {
      form: this,
      children: this.children
    }
  },
  props: {
    model: {
      type: Object
    },
    rules: {
      type: Object
    }
  },
  data() {
    return {
      children: []
    }
  },
  methods: {
    //全局校验
    validate(cb) {
      //获取所有KFormItem
      //这里如果Form和FormItem中间隔了一层就没法获取了
      // ElementUI中是这样解决的：
      // Form 在 created中监听一个事件addField 当监听到时
      // 添加fields数组中，校验时验证遍历fields即可
      const tasks = this.children
          .filter(item => item.prop)  //保证健壮性：有的KFormItem可能没有prop
          .map(item => item.validate())
      //由于async-validator返回的是promise，所以tasks为[resultPromise]
      console.log(5, tasks)
      //统一处理所有Promise结果
      Promise.all(tasks)
          .then(() => cb(true))
          .catch(() => cb(false))
    }
  }
}
</script>

<style scoped>

</style>